﻿using System;
using System.Collections.Generic;
using TPDiseño.Clases_de_Entidad;
using DAO.DataSetConsultoraTableAdapters;

namespace DAO
{
    public class DAOH_Respuesta : DAO
    {
        //Atributos de manejo de instancia (singleton)
        static DAOH_Respuesta instance = null;  
        // Atributos para acceso a los DataSet Tipados
        private DataSetConsultora.H_RespuestaDataTable H_respuestaTabla = new DataSetConsultora.H_RespuestaDataTable();
        private H_RespuestaTableAdapter H_respuestaTableAdapter = new H_RespuestaTableAdapter();

        public static DAOH_Respuesta Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new DAOH_Respuesta();
                        }
                    }
                }
                return instance;
            }
        }
        
        public H_respuesta guardar(H_respuesta unaH_respuesta, int id_pregunta){

            // Inserto la H_respuesta en la db por medio de su correspondiente table adapter
            H_respuestaTabla = H_respuestaTableAdapter.insertar(unaH_respuesta._nombre_respuesta, 
                                             unaH_respuesta._descripcion, 
                                             unaH_respuesta._orden_visualizacion, 
                                             unaH_respuesta._ponderacion, 
                                             id_pregunta
                                             );

            // Retorno la H_respuesta insertada
            return recolectarUno();
        }

        public void guardar(H_pregunta unaH_pregunta)
        {

            foreach(H_respuesta unaH_respuesta in unaH_pregunta._respuestas)
            {

                // Inserto la H_respuesta en la db por medio de su correspondiente table adapter
                H_respuestaTabla = H_respuestaTableAdapter.insertar(unaH_respuesta._nombre_respuesta,
                                                 unaH_respuesta._descripcion,
                                                 unaH_respuesta._orden_visualizacion,
                                                 unaH_respuesta._ponderacion,
                                                 unaH_pregunta._cod_h_pregunta
                                                 );
                                
            }
        }

        public void actualizar(H_respuesta unaH_respuesta){

            // Actualizo la Historial Respuesta en la db pro medio de su table adapter
            H_respuestaTableAdapter.Actualizar(unaH_respuesta._nombre_respuesta, 
                                               unaH_respuesta._descripcion, 
                                               unaH_respuesta._orden_visualizacion, 
                                               unaH_respuesta._ponderacion, 
                                               unaH_respuesta._cod_h_respuesta
                                               );

        }

        public List<H_respuesta> cargar()
        {

            // Cargo los H_respuesta de la db
            H_respuestaTabla = H_respuestaTableAdapter.GetData();

            // Finalmente devuelvo la lista de H_respuestasCargados, recolectadas por la funcion            
            return recolectar();
        }

        public List<H_respuesta> cargar(Int32 cod_H_pregunta)
        {   // obtengo la empresa por id en empresaTabla
            H_respuestaTabla = H_respuestaTableAdapter.consultarPor(cod_H_pregunta);

            // Finalmente devuelvo la lista de H_respuestasCargados, recolectadas por la funcion            
            return recolectar();
        }

        private List<H_respuesta> recolectar()
        {

            // Creo la lista para recolectar y devolver los H_respuestas cargadas de la db
            List<H_respuesta> H_respuestasCargados = new List<H_respuesta>();

            // Recorro los H_respuestas de la tabla
            foreach (DataSetConsultora.H_RespuestaRow unaH_respuestaFila in H_respuestaTabla)
            {

                // Creo un H_respuesta y lo agrego a la lista de H_respuestas cargados
                H_respuestasCargados.Add(new H_respuesta(unaH_respuestaFila.id,
                                                       unaH_respuestaFila.Nombre,
                                                       unaH_respuestaFila.Descripción,
                                                       unaH_respuestaFila.Orden_Visualización,
                                                       unaH_respuestaFila.Ponderación                                                       
                                                      )
                                        );

            }

            return H_respuestasCargados;
        }

        public H_respuesta recolectarUno()
        {

            // Finalmente retorno un nuevo objeto Empresa mapeado de la tabla
            return new H_respuesta(H_respuestaTabla[0].id,
                                   H_respuestaTabla[0].Nombre,
                                   H_respuestaTabla[0].Descripción,
                                   H_respuestaTabla[0].Orden_Visualización,
                                   H_respuestaTabla[0].Ponderación
                                  );


        }
    }
}
